import router from './router'
import store from './store'
import { Message } from 'element-ui'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
import { getToken } from '@/utils/auth' // get token from cookie
import getPageTitle from '@/utils/get-page-title'

NProgress.configure({ showSpinner: false }) // NProgress Configuration

const whiteList = ['/login', '/404', '/tips'] // no redirect whitelist

// router.beforeEach vue的全局路由守卫 beforeEach全局前置守卫， router.afterEach全局后置守卫
// 每次路由变化都会进入的函数
// 用来拦截设置权限，判断是否登录，是否需要权限
router.beforeEach(async (to, from, next) => {
  console.log(to, '即将进入的组件的路由信息')
  console.log(from, '即将离开的组件的路由信息')
  // next 继续执行 next("/path路径") 跳转到指定路径
  // 开始进度条
  NProgress.start()

  // 设置title
  document.title = getPageTitle(to.meta.title)

  // 获取token
  const hasToken = getToken()

  if (hasToken) { // 如果有token
    if (to.path === '/login') { // 当前跳转的路径是 登录页
      // if is logged in, redirect to the home page
      next({ path: '/' }) // 跳转到首页
      NProgress.done()
    } else {
      next()
      NProgress.done()
    }
  } else {
    /* has no token*/
    // 如果没有token 是否在白名单 内
    if (whiteList.indexOf(to.path) !== -1) {
      // 如果在白名单 可以继续跳转
      next()
    } else {
      // 如果没有在白名单内
      next(`/login?redirect=${to.path}`) // 重定向到登录页
      NProgress.done()
    }
  }
})
// 路由跳转后
router.afterEach((to, from) => {
  // 结束进度条NProgress
  NProgress.done()
})
